package io;//: io/BufferToText.java
// Converting text to and from ByteBuffers

import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.io.*;

public class BufferToText {

    private static final int BSIZE = 1024;

    public static void main(String[] args) throws Exception {

        String path = "D:\\MavenSpace\\thinkinjava\\src\\main\\java\\io\\BufferToText.txt";

        FileChannel fc = new FileOutputStream(path).getChannel();
        fc.write(ByteBuffer.wrap("Some text".getBytes()));
        fc.close();
        fc = new FileInputStream(path).getChannel();
        ByteBuffer buff = ByteBuffer.allocate(BSIZE);
        fc.read(buff);
        buff.flip();
        //buff.flip();
        System.out.println(buff);

        // Doesn't work:  获取视图
        System.out.println(buff.asCharBuffer());
        // Decode using this system's default Charset:
        buff.rewind();

        String encoding = System.getProperty("file.encoding");
        System.out.println("Decoded using " + encoding + ": " + Charset.forName(encoding).decode(buff));

        // Or, we could encode with something that will print:
        fc = new FileOutputStream(path).getChannel();
        fc.write(ByteBuffer.wrap("Some text".getBytes("UTF-16BE")));
        fc.close();
        // Now try reading again:
        fc = new FileInputStream(path).getChannel();
        buff.clear();
        fc.read(buff);
        buff.flip();
        System.out.println(buff.asCharBuffer());


        // Use a CharBuffer to write through:
        fc = new FileOutputStream(path).getChannel();
        buff = ByteBuffer.allocate(24); // More than needed
        buff.asCharBuffer().put("Some text");
        fc.write(buff);
        fc.close();
        // Read and display:
        fc = new FileInputStream(path).getChannel();
        buff.clear();
        fc.read(buff);
        buff.flip();
        System.out.println(buff.asCharBuffer());

    }
} /* Output:
????
Decoded using Cp1252: Some text
Some text
Some text
*///:~
